/**
 * 
 */
package com.mvity.framework.common.service;

import java.io.Serializable;
import java.util.List;

import com.mvity.framework.common.annotation.ServiceDesc;
import com.mvity.framework.common.base.BaseEntity;

/**
 * @author vity
 * @date   2012-7-23
 * @mail vity.1215@gmail.com
 */
public interface BaseService {

	/**
	 * 保存
	 * 
	 * @param model
	 * @return
	 */
	@ServiceDesc("保存对象")
	public abstract <T extends BaseEntity> T save(T model);

	/**
	 * 保存或更新
	 * 
	 * @param model
	 * @return
	 */
	@ServiceDesc("保存或更新对象")
	public abstract <T extends BaseEntity> T saveOrUpdate(T model);

	/**
	 * 更新
	 * 
	 * @param model
	 */
	@ServiceDesc("更新对象")
	public abstract <T extends BaseEntity> void update(T model);

	/**
	 * merge 更新
	 * 
	 * @param model
	 */
	@ServiceDesc("merge 更新")
	public abstract <T extends BaseEntity> void merge(T model);

	/**
	 * 删除
	 * 
	 * @param entityClass
	 * @param id
	 */
	@ServiceDesc("删除对象")
	public abstract <T extends BaseEntity, PK extends Serializable> void delete(Class<T> entityClass, PK id);

	/**
	 * 删除
	 * 
	 * @param model
	 */
	@ServiceDesc("删除对象")
	public abstract <T extends BaseEntity> void delete(T model);

	/**
	 * 获取
	 * 
	 * @param entityClass
	 * @param id
	 * @return
	 */
	@ServiceDesc("获取对象")
	public abstract <T extends BaseEntity, PK extends Serializable> T get(Class<T> entityClass, PK id);

	/**
	 * 总数
	 * 
	 * @param entityClass
	 * @return
	 */
	@ServiceDesc("获取集合总数")
	public abstract <T extends BaseEntity> int countAll(Class<T> entityClass);

	/**
	 * 集合
	 * 
	 * @param entityClass
	 * @return
	 */
	@ServiceDesc("获取集合")
	public abstract <T extends BaseEntity> List<T> listAll(Class<T> entityClass);

}